﻿using System.Collections.Generic;
using GigaSite.Domain.Entities;

namespace GigaSite.Domain.Interfaces.Repositories
{
    /// <summary>
    /// Абстрактный репозиторий сайтов
    /// </summary>
    public interface ISitesRepository: IBaseRepository<Site>
    {
        /// <summary>
        /// Добавляет указанный сайт в блокнот сайтов пользователя
        /// </summary>
        /// <param name="user">Пользователь</param>
        /// <param name="site">Сайт</param>
        void AddSiteToUser(User user, Site site);

        /// <summary>
        /// Удаляет сайт из блокнота сайтов пользователя
        /// </summary>
        /// <param name="user">Пользователь</param>
        /// <param name="site"></param>
        void RemoveSiteFromUser(User user, Site site);

        /// <summary>
        /// Добавляет сайт в указанную категорию
        /// </summary>
        /// <param name="category">Категория</param>
        /// <param name="site">Сайт</param>
        void AddSiteToCategory(Category category, Site site);

        /// <summary>
        /// Удаляет сайт из указанной категории
        /// </summary>
        /// <param name="category">Категория</param>
        /// <param name="site">сайт</param>
        void RemoveSiteFromCategory(Category category, Site site);

        /// <summary>
        /// Устанавливает категории, в которых должен находиться переданный сайт
        /// </summary>
        /// <param name="site">Сайт</param>
        /// <param name="categories">список категорий</param>
        void SetSiteCategories(Site site, IEnumerable<Category> categories);
    }
}